package cn.lyvust.first.common.util;

import net.coobird.thumbnailator.Thumbnails;
import org.springframework.beans.factory.annotation.Value;

import java.io.File;
import java.io.IOException;

/**
 * 图片处理工具
 * 包含：
 * 图片压缩主方法
 * 图片压缩次方法 （次方法中会调用主方法）
 *
 * @author ggzheng
 * @version 2.0.0
 * @date 2021-01-21
 */
public class ImageUtils {

    @Value("${oss.thumb_width}")
    public int thumb_width;
    @Value("${oss.thumb_height}")
    public int thumb_height;

    /**
     * 图片压缩次方法，按标准格式压缩图片。
     * 通过源文件路径，拿到图片对象，在输出路径下保存压缩好的图片。缩略图的宽高按标准格式。
     * <p>
     * 解释：               举例：
     *
     * @param originalPath 源文件路径           C:/image/xxx.jpg
     * @param outPutPath   输出路径             C:/thumb/yyy.jpg
     * @param extension    文件扩展名           .png
     * @return 无返回值
     * @throws IOException
     */
    public static void imageCompression(String originalPath, String outPutPath, String extension) throws IOException {
        //获取高度，宽度
        int thumbWidth = 800;
        int thumbHeight = 600;
        imageCompression(originalPath, outPutPath, extension, thumbWidth, thumbHeight);
    }


    /**
     * 图片压缩主方法，自定义压缩图片大小。
     * 通过源文件路径，拿到图片对象，在输出路径下保存压缩好的图片。缩略图的宽高可以自定义。
     * <p>
     * 解释：               举例：
     *
     * @param originalPath 源文件路径           C:/image/xxx.jpg
     * @param outPutPath   输出路径             C:/thumb/yyy.jpg
     * @param extension    文件扩展名           .png
     * @param thumbWidth   缩略图宽度           800
     * @param thumbHeight  缩略图高度           600
     * @return 无返回值
     * @throws IOException
     */
    public static void imageCompression(String originalPath, String outPutPath, String extension, int thumbWidth, int thumbHeight) throws IOException {

        File newFile = new File(outPutPath);
        //判断路径是否存在，如果不存在就创建一个
        if (!newFile.getParentFile().exists()) {
            newFile.getParentFile().mkdirs();
        }

        Thumbnails.of(originalPath).size(thumbWidth, thumbHeight).outputFormat(extension).toFile(outPutPath);
        String returnPath = outPutPath;
    }
}
